#ifndef GUI_HPP
#define GUI_HPP

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>

using namespace cv;

//! @file gui.hpp
//! @brief 定义GUI

/**
 * @brief 显示在窗口中的图像
 */
extern Mat image;

/**
 * @brief 图像中文本区域
 */
extern Rect text_rect;

/**
 * @brief 初始化GUI
 *
 * 创建一个窗口并设置窗口大小改变回调
 *
 * @param width 初始窗口宽度
 * @param height 初始窗口高度
 * @return bool 成功或失败
 */
bool InitGUI(int width, int height);

/**
 * @brief 绘制GUI,显示时间戳文本
 *
 * 该函数将time_stamp文本绘制在窗口图像上,位置居中。文本大小逐渐增大,直到填满窗口。
 * 可以传入背景色bg_color和文本色text_color参数,设置图像背景色和文本颜色。
 *
 * @param time_stamp 要绘制的时间戳字符串
 * @param bg_color   图像背景色,默认为白色
 * @param text_color 文本颜色,默认为黑色
 */
void DrawGUI(const std::string &time_stamp, int thickness_rate, Scalar bg_color, Scalar text_color);

//! @brief 结束GUI并销毁所有窗口
void EndGUI();

/**
 * @brief 鼠标事件回调
 *
 * 当窗口大小改变时,重新创建图像以适应窗口大小
 *
 * @param event 鼠标事件类型
 * @param x 鼠标x位置
 * @param y 鼠标y位置
 * @param flags 鼠标事件标志
 * @param param 可选参数
 */

#endif // GUI_HPP